package rewards.domain.restaurant;

import rewards.Dining;
import rewards.domain.account.Account;

/**
 * Determines if benefit is available for an account for dining.
 * 
 * A value object. A strategy. Scoped by the Restaurant aggregate.
 */
public interface BenefitAvailabilityPolicy {

	/**
	 * Calculates if an account is eligible to receive benefits for a dining.
	 * 
	 * @param account
	 *            the account of the member who dined
	 * @param dining
	 *            the dining event
	 * @return benefit availability status
	 */
	public boolean isBenefitAvailableFor(Account account, Dining dining);

	/**
	 * The code that represents this policy.
	 * 
	 * @return The policy code.
	 */
	public char code();

}
